package com.yc.project1_matrix.individual;

import java.util.ArrayList;
import java.util.List;

/**
 * 并行计算的针对结果矩阵中每个元素一个线程的  乘法器
 */
public class ParalleIndividualMultiplier {
    public static void multiply(double[][] matrix1,double[][] matrix2,double[][]result){
        //将线程存储在集合里
        List<Thread> threads= new ArrayList<Thread>();
        //矩阵1的行列
        int rows1= matrix1.length;
        int column1=matrix1[0].length;
        //矩阵2的行列
        int rows2= matrix2.length;
        int column2=matrix2.length;

        for (int i=0;i<rows1;i++) {
            for (int j=0;j<column2;j++) { //（矩阵1第一行对应元素乘以矩阵2第一列的对应元素）的和
                //2000*2000
                //创建线程
                Thread t =new Thread(new IndividualMultiplier(result,matrix1,matrix2,i,j));
                t.start();
                threads.add(t);
                //分批启动线程
                if (threads.size()%10==0) {
                    waitForThread(threads);
                }
            }
        }
    }

    private static void waitForThread(List<Thread> threads) {
        for (Thread t:threads) {
            try {
                t.join();//t先走，其他线程走
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}
